/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.com.claro.administracionSolicitudes.db;

import co.com.claro.administracionSolicitudes.dao.exceptions.ClaroException;
import co.com.claro.administracionSolicitudes.dto.PrivilegioSolicitudDto;
import co.com.claro.administracionSolicitudes.dto.SolicitudDto;
import co.com.claro.administracionSolicitudes.dto.UsuarioDto;
import co.com.claro.administracionSolicitudes.entity.Aplicacion;
import co.com.claro.administracionSolicitudes.entity.Cargo;
import co.com.claro.administracionSolicitudes.entity.CertificacionUsuario;
import co.com.claro.administracionSolicitudes.entity.Ciudad;
import co.com.claro.administracionSolicitudes.entity.Coordinacion;
import co.com.claro.administracionSolicitudes.entity.Empresa;
import co.com.claro.administracionSolicitudes.entity.Gerencia;
import co.com.claro.administracionSolicitudes.entity.ParametrosPassword;
import co.com.claro.administracionSolicitudes.entity.Perfil;
import co.com.claro.administracionSolicitudes.entity.PrivilegioSolicitud;
import co.com.claro.administracionSolicitudes.entity.Solicitud;
import co.com.claro.administracionSolicitudes.entity.TipoAplicacion;
import co.com.claro.administracionSolicitudes.entity.TipoCompania;
import co.com.claro.administracionSolicitudes.entity.TipoDocumento;
import co.com.claro.administracionSolicitudes.entity.TipoEmpleado;
import co.com.claro.administracionSolicitudes.entity.TipoUsuario;
import co.com.claro.administracionSolicitudes.entity.Usuario;
import co.com.claro.administracionSolicitudes.entity.UsuarioTemporal;
import co.com.claro.administracionSolicitudes.entity.UsuariosPorAplicaciones;
import co.com.claro.administracionSolicitudes.entity.enums.EstadosSolicitudEnum;
import java.util.List;
import javax.ejb.Local;

/**
 *
 * @author USUARIO
 */
@Local
public interface EJBDatabaseSolicitudesLocal {

    //--------------------------------------------------------------------------
    // UsuarioTemporal
    //--------------------------------------------------------------------------
    
    void crearUsuarioTemporal(UsuarioTemporal usuarioTemporal) throws ClaroException;
    
    void modificarUsuarioTemporal(UsuarioTemporal usuarioTemporal) throws ClaroException;
    
    void borradoLogicoUsuarioTemporal(UsuarioTemporal usuarioTemporal) throws ClaroException;
    
    UsuarioTemporal findUsuarioTemporalByIdUsuarioSolicitante(Integer idSolicitante);
    
    //--------------------------------------------------------------------------
    // Empresa
    //--------------------------------------------------------------------------
    void crearEmpresa(Empresa empresa) throws ClaroException;

    List<Empresa> findEmpresaByEstado(Short estado);

    void modificarEmpresa(Empresa empresa) throws ClaroException;

    void borradoLogicoEmpresa(Empresa empresa) throws ClaroException;

    //--------------------------------------------------------------------------
    // TipoAplicacion
    //--------------------------------------------------------------------------
    void crearTipoAplicacion(TipoAplicacion tipoAplicacion) throws ClaroException;

    List<TipoAplicacion> findTipoAplicacionByEstado(Short estado);

    void modificarTipoAplicacion(TipoAplicacion tipoAplicacion) throws ClaroException;

    void borradoLogicoTipoAplicacion(TipoAplicacion tipoAplicacion) throws ClaroException;

    //--------------------------------------------------------------------------
    // TipoDocumuento
    //--------------------------------------------------------------------------
    void crearTipoDocumento(TipoDocumento tipoDocumento) throws ClaroException;

    List<TipoDocumento> findTipoDocumentoByEstado(Short estado);

    void modificarTipoDocumento(TipoDocumento tipoDocumento) throws ClaroException;

    void borradoLogicoTipoDocumento(TipoDocumento tipoDocumento) throws ClaroException;

    //--------------------------------------------------------------------------
    // TipoEmpleado
    //--------------------------------------------------------------------------
    void crearTipoEmpleado(TipoEmpleado tipoEmpleado) throws ClaroException;

    List<TipoEmpleado> findTipoEmpleadoByEstado(Short estado);

    void modificarTipoEmpleado(TipoEmpleado tipoEmpleado) throws ClaroException;

    void borradoLogicoTipoEmpleado(TipoEmpleado tipoEmpleado) throws ClaroException;

    //--------------------------------------------------------------------------
    // TipoCompañia
    //--------------------------------------------------------------------------
    void crearTipoCompania(TipoCompania tipoCompania) throws ClaroException;

    List<TipoCompania> findTipoCompaniaByEstado(Short estado);

    void modificarTipoCompania(TipoCompania tipoCompania) throws ClaroException;

    void borradoLogicoTipoCompania(TipoCompania tipoCompania) throws ClaroException;

    //--------------------------------------------------------------------------
    // Ciudad
    //--------------------------------------------------------------------------
    void crearCiudad(Ciudad ciudad) throws ClaroException;

    List<Ciudad> findCiudadByEstado(Short estado);

    void modificarCiudad(Ciudad ciudad) throws ClaroException;

    void borradoLogicoCiudad(Ciudad ciudad) throws ClaroException;

    //--------------------------------------------------------------------------
    // Aplicacion
    //--------------------------------------------------------------------------
    void crearAplicacion(Aplicacion aplicacion) throws ClaroException;

    Aplicacion findAplicacion(int id);

    List<Aplicacion> findAplicacionByEstado(Short estado);

    void modificarAplicacion(Aplicacion aplicacion) throws ClaroException;

    void borradoLogicoAplicacion(Aplicacion aplicacion) throws ClaroException;

    Integer countAplicacionByNombreTipoEstado(String nombre, Integer tipoAplicacion, Short estado);
    //--------------------------------------------------------------------------
    // Gerencia
    //--------------------------------------------------------------------------

    void crearGerencia(Gerencia gerencia) throws ClaroException;

    List<Gerencia> findGerenciaByEstado(Short estado);

    void modificarGerencia(Gerencia gerencia) throws ClaroException;

    void borradoLogicoGerencia(Gerencia gerencia) throws ClaroException;

    Gerencia findGerenciaById(Short idGerencia);
    //--------------------------------------------------------------------------
    // Cargo
    //--------------------------------------------------------------------------

    void crearCargo(Cargo cargo) throws ClaroException;

    List<Cargo> findCargoByEstado(Short estado);

    void modificarCargo(Cargo cargo) throws ClaroException;

    void borradoLogicoCargo(Cargo cargo) throws ClaroException;
    //--------------------------------------------------------------------------
    // Coordinacion
    //--------------------------------------------------------------------------

    void crearCoordinacion(Coordinacion coordinacion) throws ClaroException;

    List<Coordinacion> findCoordinacionByEstado(Short estado);

    void modificarCoordinacion(Coordinacion coordinacion) throws ClaroException;

    void borradoLogicoCoordinacion(Coordinacion coordinacion) throws ClaroException;

    //--------------------------------------------------------------------------
    // TipoUsuario
    //--------------------------------------------------------------------------
    List<TipoUsuario> findTipoUsuarios();

    //--------------------------------------------------------------------------
    // PrivilegioSolicitud
    //--------------------------------------------------------------------------
    List<PrivilegioSolicitud> findPrivilegioByGerencia(short idGerencia);

    List<PrivilegioSolicitud> findPrivilegioByAplicacion(int idAplicacion);

    List<PrivilegioSolicitud> findPrivilegioByAplicacionGerencia(int idAplicacion, int idGerencia);

    int countAllPrivilegioSolicitudes();

    int countPrivilegiosQuery(PrivilegioSolicitudDto dataTransfer);

    void crearPrivilegioSolicitud(PrivilegioSolicitud privilegio) throws ClaroException;

    PrivilegioSolicitud findPrivilegioByAplicacionPerfilGerencia(int idAplicacion, int idPerfil, int idGerencia);

    PrivilegioSolicitud findPrivilegioSolicitud(int idPrivilegio);

    void borradoLogicoPrivilegioSolicitud(PrivilegioSolicitud privilegioSolicitud) throws ClaroException;

    void modificarPrivilegioSolicitud(PrivilegioSolicitud privilegioSolicitud) throws ClaroException;

    int countPrivilegioByAplicacionGerenciaPerfil(int idAplicacion, int idGerenciaAprobadora, int idPerfil, Short activo);

    List<PrivilegioSolicitud> findPrivilegios(PrivilegioSolicitudDto dataTransfer);

    List<PrivilegioSolicitud> findPrivilegios(int firstResult, int maxResults, PrivilegioSolicitudDto dataTransfer);

    //--------------------------------------------------------------------------
    // Perfil
    //--------------------------------------------------------------------------
    void borradoLogicoPerfil(Perfil perfil) throws ClaroException;

    void crearPerfil(Perfil perfil) throws ClaroException;

    void modificarPerfil(Perfil perfil) throws ClaroException;

    List<Perfil> findPerfilByEstado(Short estado);

    //--------------------------------------------------------------------------
    // UsuarioPorAplicaciones
    //--------------------------------------------------------------------------
    List<UsuariosPorAplicaciones> findAplicacionesByUsuario(Integer idUsuario);

    List<UsuariosPorAplicaciones> findAplicacionesActivoByUsuario(Short activo, Integer idUsuario);

    void crearUsuarioPorAplicaciones(UsuariosPorAplicaciones usrxapps) throws ClaroException;

    int countUsuarioFijoByIdUsuario(Integer idSolicitante, Integer idAplicacion);

    UsuariosPorAplicaciones findUsuarioPorAplicaciones(Integer idUsuarioAplicacion);

    //--------------------------------------------------------------------------
    // ParametrosPassword
    //--------------------------------------------------------------------------
    List<ParametrosPassword> findParametrosPasswordEntities(int maxResults, int firstResult);

    List<ParametrosPassword> findAllParametrosPasswordEntities();

    ParametrosPassword findParametrosPassword(Short id);

    //--------------------------------------------------------------------------
    // CertificacionUsuario
    //--------------------------------------------------------------------------
    void crearCertificacionUsuario(CertificacionUsuario certificacionUsuario) throws ClaroException;

    //--------------------------------------------------------------------------
    // Usuario
    //--------------------------------------------------------------------------
    void modificarUsuario(Usuario usuario) throws ClaroException;

    List<Usuario> findUsuarioByGerenciaAndGrupo(short idGerencia, short idEjecutor, short idAdministrador, Short activo);

    List<Usuario> findUsuarioByGerencia(short idGerencia, Short activo);

    void borradoLogicoUsuario(Usuario usuario) throws ClaroException;

    Usuario findUsuarioById(int idUsuario);

    Usuario findUsuarioByNumeroDocumento(long numeroDocumento);

    void crearUsuario(Usuario usuario) throws ClaroException;

    int countAllUsuarios();

    int countUsuariosQuery(UsuarioDto dataTransfer);

    List<Usuario> findUsuarios(int firstResult, int maxResults);

    List<Usuario> findUsuarioByUsername(String username);

    List<Usuario> findUsuarioByGerenciaAndUsername(short idGerencia, String username, Short activo);

    Usuario findUsuarioByGerenciaAndNumeroDocumento(short idGerencia, Long numeroDocumento, Short activo);

    List<Usuario> findUsuariosByNombre(String nombres);

    List<Usuario> findUsuariosByApellido(String apellidos);

    List<Usuario> findUsuarios(UsuarioDto dataTransfer);

    List<Usuario> findUsuarios(int firstResult, int maxResults, UsuarioDto dataTransfer);

    List<Usuario> findUsuariosByGrupo(Short idGrupo, String sortCol, boolean asc);

    Usuario findUsuarioByUsernameExacto(String username);

    //--------------------------------------------------------------------------
    // Solicitud
    //--------------------------------------------------------------------------
    List<Solicitud> findSolicitudByEjecutor(Integer idEjecutor, short idEstado);

    List<Solicitud> findSolicitudByGerenciaAsignadoraAndEstado(Short idGerencia, short idEstado);

    List<Solicitud> findSolicitudByGerenciaAprobadoraAndEstado(Short idGerencia, short idEstado);

    List<Solicitud> findSolicitudBySolicitante(Integer idSolicitante, short idEstado);

    Solicitud findSolicitudById(Long idSolicitud);

    List<Solicitud> findSolicitudByGerencia(short idGerencia);

    List<Solicitud> findSolicitudes(int paginaInicio, int maxResultados);

    int countAllSolicitudes();

    int countSolicitudesQuery(SolicitudDto dataTransfer);

    Solicitud findSolicitudByIdSolicitudAndGerenciaAprobadora(Long id, Short idGerencia);

    Solicitud findSolicitudByIdSolicitudAndGerenciaAsignadora(Long id, Short idGerencia);

    Solicitud findSolicitudByIdSolicitudAndGerencia(Long id, Short idGerencia);

    Solicitud modificarSolicitud(Solicitud solicitud) throws ClaroException;

    void crearSolicitud(Solicitud solicitud) throws ClaroException;

    void insertarSolicitudesMasivas(List<Solicitud> solicitudes) throws ClaroException;

    List<Solicitud> findSolicitudByIdSolicitanteEstadosAccion(Integer idSolicitante, Short accion, List<EstadosSolicitudEnum> estados);

    List<Solicitud> findSolicitudes(SolicitudDto dataTransfer);

    List<Solicitud> findSolicitudes(int firstResult, int maxResults, SolicitudDto dataTransfer);

    int countSolicitudesByAplicacionAccionPerfilEstados(Integer idAplicacion, short accion, Integer idPerfil, List<EstadosSolicitudEnum> estados);
    
    void clearAndFlushSolicitudes();

}
